package com.whfc.mach.manager.strategy.oil;

import com.whfc.mach.dto.AppMachOilLookup;
import com.whfc.mach.dto.Oil;
import com.whfc.mach.dto.OilStat;

import java.util.List;

/**
 * @Description: 油量计算-算法策略
 * @author: xugcheng
 * @version: 1.0
 * @date: 2020-12-11 9:49
 */
public interface OilStrategy {

    /**
     * 计算耗油/加油
     *
     * @param oilList       油位列表
     * @param oilTankHeight 油箱高度(cm)
     * @param oilTankVolume 油箱容积(L)
     * @return 耗油量(L)
     */
    OilStat compute(List<Oil> oilList, Double oilTankHeight, Double oilTankVolume);

    /**
     * 计算耗油/加油
     *
     * @param oilList       油位列表
     * @param oilTankHeight 油箱高度(cm)
     * @param oilTankVolume 油箱容积(L)
     * @param lookup        油位标定速查表
     * @return
     */
    OilStat compute(List<Oil> oilList, Double oilTankHeight, Double oilTankVolume, AppMachOilLookup lookup);

    /**
     * 计算剩余油量
     *
     * @param oilTankHeight 油箱高度(cm)
     * @param oilTankVolume 油箱容积(L)
     * @param oilPos        油位高度(mm)
     * @param lookup
     * @return
     */
    Oil computeRemainOil(Integer oilPos, Double oilTankHeight, Double oilTankVolume, AppMachOilLookup lookup);

    /**
     * 计算剩余油量
     *
     * @param oilList       油位列表
     * @param oilTankHeight 油箱高度(cm)
     * @param oilTankVolume 油箱容积(L)
     * @param lookup        油位标定速查表
     * @return
     */
    List<Oil> computeRemainOil(List<Oil> oilList, Double oilTankHeight, Double oilTankVolume, AppMachOilLookup lookup);
}
